package cinvestav.adviseme.controller;

import java.util.List;
import java.util.Map;

import cinvestav.adviseme.databasemodel.IPersonaDB;
import cinvestav.adviseme.datamodel.Persona;
import cinvestav.adviseme.util.DBException;

public interface IPersonaController {

	IPersonaDB getPersonaDB();
    void setPersonaDB(IPersonaDB lugarAgregadoDB);
    /**
     * Obtiene la lista de todas las personas almacenadas en la base de datos
     * @return	Lista de Personas
     * @throws DBException
     */
    List<Persona> getAll() throws DBException;
    /**
     * Busca las personas mediante un filtro deseado
     * @param filtros	Mapa con todos los filtros que se desean utilizar
     * @return	Lista de las personas que correspondan con los filtros ingresados
     * @throws DBException
     */
    List<Persona> getByFilters(Map<String, String[]> filtros) throws DBException;
    /**
     * Elimina una persona de la base de datos
     * @param persona Persona que se desea eliminar, el campo necesario es el ID
     * @return	TRUE Si se elimino correctamente, FALSE en otro caso
     * @throws DBException
     */
    Boolean delete(Persona persona) throws DBException;
    /**
     * Inserta una nueva persona a la base de datos
     * @param persona	Persona que se desea insertar a la base
     * @return	True si la persona se inserto correctamente, FALSE en otro caso
     * @throws DBException
     */
    Boolean insert(Persona persona) throws DBException;
    /**
     * Obtiene la lista de amigos de una persona
     * @param persona	Persona a la cual se desea buscar sus amigos
     * @return	Lista de las personas que son amigos de la persona indicada
     * @throws DBException
     */
    List<Persona> getFriends(Persona persona) throws DBException;
    
    /**
     * Obtiene la lista de amigos de una persona deacuerdo a los parametros seleccionados
     * @param persona	Persona a la cual se desea buscar sus amigos
     * @param filtros Filtros que se utilizaran en la busqueda
     * @return	Lista de las personas que son amigos de la persona indicada
     * @throws DBException
     */
    List<Persona> getFriendsByFilters(Persona persona,Map<String, String[]> filtros) throws DBException;
    Boolean deleteFriendShip(Persona personaorigen, Persona personadestino) throws DBException;
}
